home *** CD-ROM | disk | FTP | other *** search
/ Programming Languages Suite / ProgramD2.iso / Visual Database / Visual Foxpro 6.0 (Ent. Edition) / Vf6ent Extractor.EXE / TOOLS / XSOURCE / XSOURCE.ZIP / vfpsource / wizards / Wzweb / wzweb.prg < prev    next >
Encoding:
Text File  |  1998-05-01  |  18.2 KB  |  615 lines

  1. #INCLUDE "wzweb.h"
  2.  
  3. *--------------------------------------
  4. DEFINE CLASS HTMLEngine AS WizEngineAll
  5. *--------------------------------------
  6.     
  7.     cWizTitle=""
  8.     cWebStyle=""
  9.     cWebLayout=""
  10.     cStyleSheet=""
  11.     cBodyColor=""
  12.     cBodyImage=""
  13.     lCopyImages = .F.
  14.     cGenHTMLAlias = ""
  15.     cOptionsID = ""
  16.     nHTMLFrames = 0
  17.     lProcessCustomProperties = .F.
  18.     vPreviewScope = 50
  19.     cSourceName = ""
  20.     
  21.     DIMENSION aCustomTags[1,15]
  22.     aCustomTags=""
  23.  
  24.     DIMENSION aWebStyles[1]
  25.     aWebStyles=""
  26.     
  27.     DIMENSION aStyleOrder[1]
  28.     aStyleOrder=""
  29.  
  30.     DIMENSION aOptions[1]
  31.     aOptions=""
  32.  
  33.     DIMENSION aSaveOptions[1]
  34.     aSaveOptions=""
  35.  
  36.     DIMENSION aTempFiles[1]
  37.     aTempFiles=""
  38.  
  39.     PROCEDURE Destroy
  40.         LOCAL i
  41.         THIS.SetErrorOff=.T.
  42.         FOR i = 1 TO ALEN(THIS.aTempFiles)
  43.             IF FILE(THIS.aTempFiles[m.i])
  44.                 DELETE FILE (THIS.aTempFiles[m.i])
  45.             ENDIF                
  46.         ENDFOR
  47.         THIS.SetErrorOff=.F.
  48.         THIS.HadError=.F.
  49.         DoDefault()
  50.     ENDPROC
  51.  
  52.     PROCEDURE ProcessOutput
  53.         *- the ProcessOutput method of the sample wizard will call this function
  54.  
  55.         LOCAL cValue, i, lnNumFields, lnAction, lcSortText, lcFieldText, oNewTag
  56.         LOCAL lcWebLayout,lnSaveArea,lcID,lcSQL,lcData,lcScope, lcFldList  
  57.  
  58.         lcScope = ""
  59.         lnNumFields = ALEN(THIS.aWizFields,1)
  60.         lcFieldText = ""
  61.         FOR i = 1 TO lnNumFields
  62.             lcFieldText = lcFieldText + THIS.aWizFields[m.i,1]+;
  63.                 IIF(m.i=lnNumFields,"",",")
  64.         ENDFOR
  65.  
  66.         *- if the user selected a sort order, implement that here
  67.         lnNumFields = ALEN(THIS.aWizSorts,1)
  68.         lcSortText = ""
  69.  
  70.         IF THIS.lHasSortTag
  71.             i = 1
  72.             DO WHILE !EMPTY(KEY(m.i))
  73.                 IF UPPER(TAG(m.i)) == UPPER(THIS.aWizSorts[1])
  74.                     THIS.aWizSorts[1] = KEY(m.i)
  75.                     EXIT
  76.                 ENDIF
  77.             ENDDO
  78.         ENDIF
  79.         
  80.         IF !EMPTY(THIS.aWizSorts[1])
  81.             lcSortText = "ORDER BY "
  82.             FOR i = 1 TO lnNumFields
  83.                 lcSortText = lcSortText + THIS.aWizSorts[m.i,1]+;
  84.                     IIF(m.i=m.lnNumFields,"",",")
  85.             ENDFOR
  86.             lcSortText = m.lcSortText + IIF(!THIS.lSortAscend," DESC","")    
  87.         ENDIF
  88.         
  89.         IF !ALIAS()==UPPER(THIS.cWizAlias)
  90.             SELECT (THIS.cWizAlias)
  91.         ENDIF
  92.  
  93.         lcData = CURSORGETPROP("sourcename")
  94.         THIS.cSourceName = CURSORGETPROP("sourcename")
  95.         IF !EMPTY(CURSORGETPROP("database")) AND SET("DATA")#THIS.cDBCAlias
  96.             OPEN DATABASE (THIS.cDBCName)
  97.         ENDIF
  98.         IF  CURSORGETPROP("sourcetype")#3
  99.             * Need to handle Parameterized view problems
  100.             THIS.SetErrorOff = .T.
  101.             REQUERY()
  102.             THIS.SetErrorOff = .F.
  103.             IF THIS.HadError
  104.                 THIS.HadError = .F.
  105.                 MESSAGEBOX(MESSAGE())
  106.                 RETURN
  107.             ENDIF
  108.         ENDIF
  109.         
  110.         SELECT &lcFieldText. FROM (lcData) &lcSortText. INTO CURSOR webwizard_query
  111.         
  112.         THIS.SaveProfile()            &&add layout and style info
  113.         THIS.SetCustomOptions(.t.)    &&add layout specific options for processing before generation
  114.         THIS.SetCustomOptions()        &&add layout specific options for processing after generation
  115.         THIS.AddCustomTags(3)        &&add header custom tags
  116.         THIS.AddCustomTags(1)        &&add before body custom tags
  117.         THIS.AddCustomTags(2)        &&add after body custom tags
  118.  
  119.         * lcWebLayout = THIS.cWebLayout
  120.         lcWebLayout = TYPE_WIZARD        
  121.         lnAction=5
  122.         
  123.         DO CASE
  124.         CASE VARTYPE(THIS.vPreviewScope)="C"
  125.             lcScope = ALLTRIM(THIS.vPreviewScope)
  126.         CASE VARTYPE(THIS.vPreviewScope)="N" AND ;
  127.           THIS.nWizAction = 9 AND !EMPTY(THIS.vPreviewScope)
  128.             lcScope = "NEXT "+TRANS(THIS.vPreviewScope)        &&do not localize
  129.         ENDCASE
  130.                 
  131.         DO (_GENHTML) WITH THIS.cOutFile,ALIAS(),lnAction,,lcWebLayout,lcScope
  132.  
  133.         * Reset Field Caption
  134.         _oHTML.cPreGenerateTableScript="oEngine.UpdateFieldList()"
  135.         _oHTML.Generate()
  136.  
  137.         * Run script code for any styles selected
  138.         FOR i = 1 TO ALEN(THIS.aWebStyles)
  139.             _oHTML.RunScript(THIS.aWebStyles[m.i])
  140.         ENDFOR
  141.         
  142.         DO CASE
  143.         CASE THIS.nWizAction = 2
  144.             *- create and open HTML file in a text editor
  145.             _oHTML.ViewSource()
  146.         CASE THIS.nWizAction = 3
  147.             *- create and open HTML file in a browser
  148.             _oHTML.Show()
  149.         CASE THIS.nWizAction = 4
  150.             *- create script
  151.             IF EMPTY(THIS.cOutFile)
  152.                 RETURN
  153.             ENDIF
  154.             lnSaveArea=SELECT()
  155.             SELECT (THIS.cGenHTMLAlias)
  156.             lcID = SYS(2015)
  157.             REPLACE ID WITH lcID, SAVE WITH .T.
  158.             SELECT (lnSaveArea)
  159.             STRTOFILE(SCRIPTHEADER_LOC,THIS.cOutFile)
  160.             STRTOFILE("LOCAL lnSaveArea"+C_CRLF,THIS.cOutFile,.T.)
  161.             STRTOFILE("lnSaveArea=SELECT()"+C_CRLF,THIS.cOutFile,.T.)
  162.             STRTOFILE("SELECT 0"+C_CRLF+C_CRLF,THIS.cOutFile,.T.)
  163.             SELECT (THIS.cWizAlias)
  164.             IF !EMPTY(CURSORGETPROP("database"))
  165.                 STRTOFILE([OPEN DATABASE "]+THIS.cDBCName+["]+C_CRLF,THIS.cOutFile,.T.)
  166.             ENDIF
  167.             lcData = CURSORGETPROP("sourcename")
  168.             lcSQL = [SELECT ] + lcFieldText + [ FROM "]+lcData+[" ;]+C_CRLF+;
  169.                     [  ]+lcSortText + [ INTO CURSOR webwizard_query] + C_CRLF+C_CRLF
  170.             STRTOFILE(lcSQL,THIS.cOutFile,.T.)
  171.             lcFldList = THIS.UpdateFieldList()
  172.             IF !EMPTY(lcFldList)
  173.                 lcFldList = [+"]+lcFldList+["]
  174.             ENDIF
  175.             STRTOFILE([DO (_GENHTML) WITH "]+FORCEEXT(THIS.cOutFile,"HTM")+ [",ALIAS()]+lcFldList+[,2,,"]+lcID+["]+C_CRLF+C_CRLF,;
  176.                 THIS.cOutFile,.T.)
  177.             STRTOFILE([IF USED("webwizard_query")]+C_CRLF,THIS.cOutFile,.T.)
  178.             STRTOFILE("  USE IN webwizard_query"+C_CRLF,THIS.cOutFile,.T.)
  179.             STRTOFILE("ENDIF"+C_CRLF,THIS.cOutFile,.T.)
  180.             STRTOFILE("SELECT (lnSaveArea)"+C_CRLF,THIS.cOutFile,.T.)
  181.             MODIFY COMMAND (THIS.cOutFile) NOWAIT
  182.         CASE THIS.nWizAction = 9
  183.             *- Preview
  184.             * Need to keep trap of temp files so we can clean up later
  185.             DIMENSION THIS.aTempFiles[ALEN(THIS.aTempFiles)+1]
  186.             THIS.aTempFiles[ALEN(THIS.aTempFiles)]= THIS.cOutFile
  187.             * Check if layout created extra files as well
  188.             IF PEMSTATUS(_oHTML,"aGeneratedFiles",5) AND TYPE("_oHTML.aGeneratedFiles[1]")="C"
  189.                 FOR i = 1 TO ALEN(_OHTML.aGeneratedFiles)
  190.                     DIMENSION THIS.aTempFiles[ALEN(THIS.aTempFiles)+1]
  191.                     THIS.aTempFiles[ALEN(THIS.aTempFiles)]= _OHTML.aGeneratedFiles[m.i]
  192.                 ENDFOR
  193.             ENDIF
  194.             _oHTML.Show()
  195.         OTHERWISE
  196.             *- create HTML file only
  197.             _oHTML.CreateOutFile(_oHTML.cOutFile)
  198.         ENDCASE
  199.  
  200.         IF USED("webwizard_query")
  201.               USE IN webwizard_query
  202.         ENDIF
  203.  
  204.         RELEASE _oHTML
  205.  
  206.     ENDPROC
  207.  
  208.     PROCEDURE UpdateFieldList
  209.         LOCAL i,lcSource,lcCaption,lcFldStr,llFoundCaption
  210.         IF EMPTY(THIS.cDBCName)
  211.             RETURN ""
  212.         ENDIF
  213.         IF SET("DATA")#THIS.cDBCAlias
  214.             OPEN DATABASE (THIS.cDBCName)
  215.         ENDIF
  216.         llFoundCaption=.F.
  217.         lcFldStr = ""
  218.         lcSource = THIS.cSourceName
  219.         FOR i = 1 TO ALEN(_oHTML.aFieldList,1)
  220.             lcFldStr = lcFldStr + ","
  221.             lcCaption = ALLTRIM(DBGETPROP(lcSource+"."+_oHTML.aFieldList[m.i,1],"field","caption"))
  222.             IF !EMPTY(lcCaption)
  223.                 llFoundCaption=.T.
  224.                 _oHTML.aFieldList[m.i,5] = lcCaption
  225.                 lcFldStr = lcFldStr + lcCaption +"@"
  226.             ENDIF
  227.             lcFldStr = lcFldStr + _oHTML.aFieldList[m.i,1]
  228.         ENDFOR
  229.         RETURN IIF(llFoundCaption,lcFldStr,"")
  230.     ENDPROC
  231.  
  232.     PROCEDURE AddCustomTags(nTagPosition)
  233.  
  234.         LOCAL i,oHTMLTag,oHTMLTag2,lnTagType,lcHeading,lHasFontTag,lcTagStr,lnSaveArea
  235.         LOCAL lcHTMLTag,llSetTopTag
  236.         PRIVATE laTags
  237.         DIMENSION laTags[1]
  238.         STORE "" TO laTags
  239.         IF EMPTY(THIS.aCustomTags[1])
  240.             RETURN 
  241.         ENDIF
  242.                 
  243.         DO CASE
  244.         CASE nTagPosition = 1
  245.             lcHTMLTag = "_oHTML.Body"
  246.         CASE nTagPosition = 2
  247.             lcHTMLTag = "_oHTML.Body"
  248.         CASE nTagPosition = 3
  249.             lcHTMLTag = "_oHTML.Body"
  250.         ENDCASE
  251.  
  252.         FOR i = 1 TO ALEN(THIS.aCustomTags,1)
  253.             IF THIS.aCustomTags[m.i,2]#nTagPosition
  254.                 LOOP
  255.             ENDIF
  256.             IF !llSetTopTag
  257.                 THIS.InsaItem(@laTags,[oHTMLTag = ]+lcHTMLTag)
  258.                 llSetTopTag = .T.
  259.             ENDIF
  260.             lnTagType = THIS.aCustomTags[m.i,15] 
  261.             
  262.             DO CASE
  263.             CASE lnTagType = 1        &&text
  264.                 THIS.AddFontTag("oHTMLTag",m.i,@laTags)
  265.                 THIS.AddBoldTag("oHTMLTag",m.i,@laTags)
  266.                 THIS.AddItalicTag("oHTMLTag",m.i,@laTags)
  267.                 THIS.InsaItem(@laTags,[oHTMLTag.AddItem("]+THIS.aCustomTags[m.i,5]+[")])
  268.  
  269.             CASE lnTagType = 2        &&hyperlink
  270.                 IF !EMPTY(THIS.aCustomTags[m.i,11])
  271.                     THIS.aCustomTags[m.i,13]=""                
  272.                     THIS.InsaItem(@laTags,[oHTMLTag2 = oHTMLTag.AddTag("A")])
  273.                     THIS.InsaItem(@laTags,[oHTMLTag2.HREF = "]+THIS.GetHREF(THIS.aCustomTags[m.i,11])+["])
  274.                     THIS.AddFontTag("oHTMLTag2",m.i,@laTags)
  275.                     THIS.AddBoldTag("oHTMLTag2",m.i,@laTags)
  276.                     THIS.AddItalicTag("oHTMLTag2",m.i,@laTags)
  277.                     THIS.InsaItem(@laTags,[oHTMLTag2.AddItem("]+IIF(EMPTY(THIS.aCustomTags[m.i,5]),;
  278.                         THIS.aCustomTags[m.i,11],THIS.aCustomTags[m.i,5])+[")])
  279.                 ENDIF
  280.  
  281.             CASE lnTagType = 3        &&image
  282.                 IF !EMPTY(THIS.aCustomTags[m.i,11])
  283.                     THIS.InsaItem(@laTags,[oHTMLTag2 = oHTMLTag.AddTag("IMG")])
  284.                     THIS.InsaItem(@laTags,[oHTMLTag2.SRC = "]+THIS.GetHREF(THIS.aCustomTags[m.i,11])+["])
  285.                 ENDIF
  286.  
  287.             CASE lnTagType = 4        &&marquee
  288.                 THIS.aCustomTags[m.i,14]=0
  289.                 THIS.InsaItem(@laTags,[oHTMLTag2 = oHTMLTag.AddTag("Marquee")])
  290.                 IF !EMPTY(THIS.aCustomTags[m.i,12])
  291.                     THIS.InsaItem(@laTags,[oHTMLTag2.BgColor = "]+THIS.aCustomTags[m.i,12]+["])
  292.                 ENDIF
  293.                 THIS.AddFontTag("oHTMLTag2",m.i,@laTags)
  294.                 THIS.AddBoldTag("oHTMLTag2",m.i,@laTags)
  295.                 THIS.AddItalicTag("oHTMLTag2",m.i,@laTags)
  296.                 THIS.InsaItem(@laTags,[oHTMLTag2.AddItem("]+THIS.aCustomTags[m.i,5]+[")])
  297.  
  298.             CASE lnTagType = 5        &&horizontal rule
  299.                 THIS.InsaItem(@laTags,[oHTMLTag2 = oHTMLTag.AddTag("HR")])
  300.                 THIS.InsaItem(@laTags,[oHTMLTag2.Align = ]+THIS.GetAlign(THIS.aCustomTags[m.i,14]))
  301.                 IF !EMPTY(THIS.aCustomTags[m.i,12])
  302.                     THIS.InsaItem(@laTags,[oHTMLTag2.Color = "]+THIS.aCustomTags[m.i,12]+["])
  303.                 ENDIF
  304.                 
  305.             CASE lnTagType = 6        &&line break
  306.                 THIS.InsaItem(@laTags,[oHTMLTag2 = oHTMLTag.AddTag("BR")])
  307.                 
  308.             CASE lnTagType = 7        &&tag
  309.                 THIS.InsaItem(@laTags,[oHTMLTag.AddItem("]+THIS.aCustomTags[m.i,5]+[")])
  310.                 
  311.             ENDCASE
  312.             
  313.             * Add Class attribute
  314.             IF !EMPTY(THIS.aCustomTags[m.i,4]) AND !INLIST(lnTagType,1,7)
  315.                 THIS.InsaItem(@laTags,[oHTMLTag2._Class = "]+THIS.aCustomTags[m.i,4]+["])
  316.             ENDIF
  317.         ENDFOR
  318.         
  319.         lcTagStr=""
  320.         FOR i = 1 TO ALEN(laTags)
  321.             IF !EMPTY(ALLTRIM(laTags[m.i]))
  322.                 lcTagStr = lcTagStr+ALLTRIM(laTags[m.i])+C_CRLF
  323.             ENDIF
  324.         ENDFOR
  325.         lnSaveArea=SELECT()
  326.         SELECT (THIS.cGenHTMLAlias)
  327.         
  328.         DO CASE
  329.         CASE nTagPosition = 1    &&before data
  330.             REPLACE PreScript WITH PreScript + C_CRLF + lcTagStr
  331.         CASE nTagPosition = 2    &&after data
  332.             REPLACE GenScript WITH GenScript + C_CRLF + lcTagStr
  333.         CASE nTagPosition = 3    &&header
  334.             REPLACE PreScript WITH PreScript + C_CRLF + lcTagStr
  335.         ENDCASE
  336.         
  337.         SELECT (lnSaveArea)
  338.     ENDPROC
  339.  
  340.     PROCEDURE SortStyles
  341.         * Cannot simply do an ACOPY since aWebStyles may 
  342.         * have changed since sorting done.
  343.         LOCAL i,laTmp,lcSaveExact
  344.         DIMENSION laTmp[1]
  345.         IF EMPTY(THIS.aStyleOrder[1])
  346.             * No sort order applied
  347.             RETURN
  348.         ENDIF
  349.         ACOPY(THIS.aStyleOrder,laTmp)
  350.         lcSaveExact=SET("EXACT")
  351.         SET EXACT ON
  352.         * Get valid sorts
  353.         FOR i = ALEN(THIS.aStyleOrder) TO 1 Step -1
  354.             IF ASCAN(THIS.aWebStyles,laTmp[m.i])=0
  355.                 ADEL(laTmp,m.i)
  356.                 IF ALEN(laTmp)>1
  357.                     DIMENSION laTmp[ALEN(latmp)-1]
  358.                 ENDIF
  359.             ENDIF
  360.         ENDFOR
  361.         IF ALEN(THIS.aWebStyles)#ALEN(laTmp) OR EMPTY(laTmp[1])
  362.             FOR i = 1 TO ALEN(THIS.aWebStyles)
  363.                 IF ASCAN(laTmp,THIS.aWebStyles[m.i])#0
  364.                     LOOP
  365.                 ENDIF
  366.                 DIMENSION laTmp[ALEN(laTmp)+1]
  367.                 laTmp[ALEN(laTmp)] = THIS.aWebStyles[m.i]
  368.             ENDFOR
  369.         ENDIF
  370.         DIMENSION THIS.aWebStyles[1]
  371.         ACOPY(laTmp,THIS.aWebStyles)
  372.         SET EXACT &lcSaveExact
  373.     ENDPROC
  374.     
  375.     PROCEDURE SaveProfile
  376.         LOCAL lnSaveArea,lcLinkStr,i,lcPreStr,lcPostStr,laPreScript,laPostScript,lcTmpStr
  377.         THIS.SortStyles()
  378.         lnSaveArea = SELECT()
  379.         DIMENSION laPreScript[1]
  380.         DIMENSION laPostScript[1]
  381.         store "" to laPreScript,laPostScript
  382.         SELECT (THIS.cGenHTMLAlias)
  383.         LOCATE FOR ALLTRIM(id)==TYPE_WIZARD AND ALLTRIM(type)==TYPE_WIZARD AND !DELETED()
  384.         IF !FOUND()
  385.             INSERT INTO (DBF()) (type,id) ;
  386.                 VALUES(TYPE_WIZARD,TYPE_WIZARD)
  387.         ENDIF
  388.         REPLACE PreScript with "",PostScript WITH "",GenScript WITH ""
  389.         * Get string for Links field
  390.         lcLinkStr = ""
  391.         FOR i = 1 TO ALEN(THIS.aWebStyles)
  392.             IF !EMPTY(THIS.aWebStyles[m.i])
  393.                 lcLinkStr = lcLinkStr + ALLTRIM(THIS.aWebStyles[m.i]) + C_CRLF
  394.             ENDIF
  395.         ENDFOR
  396.         lcLinkStr = lcLinkStr + THIS.cWebLayout
  397.  
  398.         * Get string for Prescript field
  399.         lcPropStr=""
  400.     
  401.         * Add style sheet and custom body settings
  402.         IF !EMPTY(THIS.cStyleSheet)
  403.             THIS.Insaitem(@laPreScript,[oNewTag = _oHTML.Head.AddTag("Link")])
  404.             THIS.Insaitem(@laPreScript,[oNewTag.rel = "stylesheet"])
  405.             THIS.Insaitem(@laPreScript,[oNewTag.href = "]+THIS.cStyleSheet+["])
  406.         ENDIF
  407.         IF !EMPTY(THIS.cWizTitle)
  408.             THIS.Insaitem(@laPreScript,[_oHTML.Head.Title.AddText("]+THIS.cWizTitle+[")])
  409.         ENDIF
  410.         IF !EMPTY(THIS.cBodyColor)
  411.             THIS.Insaitem(@laPreScript,[_oHTML.Body.bgColor = "]+THIS.cBodyColor+["])
  412.         ENDIF
  413.         IF !EMPTY(THIS.cBodyImage)
  414.             THIS.Insaitem(@laPreScript,[_oHTML.Body.background = "]+THIS.GetHREF(THIS.cBodyImage)+["])
  415.         ENDIF
  416.  
  417.         lcPreStr=""
  418.         FOR i = 1 TO ALEN(laPreScript)
  419.             IF !EMPTY(ALLTRIM(laPreScript[m.i]))
  420.                 lcPreStr = lcPreStr+ALLTRIM(laPreScript[m.i])+C_CRLF
  421.             ENDIF
  422.         ENDFOR
  423.  
  424.         lcPostStr=""
  425.         FOR i = 1 TO ALEN(laPostScript)
  426.             IF !EMPTY(ALLTRIM(laPostScript[m.i]))
  427.                 lcPostStr = lcPostStr+ALLTRIM(laPostScript[m.i])+C_CRLF
  428.             ENDIF
  429.         ENDFOR
  430.  
  431.         REPLACE Links WITH lcLinkStr, Prescript WITH lcPreStr, Postscript WITH lcPostStr
  432.  
  433.         SELECT (lnSaveArea)
  434.     ENDPROC
  435.  
  436.     PROCEDURE SetCustomOptions
  437.         LPARAMETER tlSetBefore
  438.         LOCAL i,lcStyleProp,lcStyleVal,laStyles,lcSaveExact,laGenScript,lnSaveArea,lcGenStr,llSetBefore
  439.         DIMENSION laStyles[1,2]
  440.         DIMENSION laGenScript[1]
  441.         STORE "" TO laGenScript
  442.         lcSaveExact = SET("EXACT")
  443.         IF VARTYPE(tlSetBefore)#"L"
  444.             tlSetBefore = .F.
  445.         ENDIF
  446.         llSetBefore=tlSetBefore
  447.         
  448.         IF !THIS.lProcessCustomProperties OR EMPTY(THIS.aSaveOptions[1])
  449.             RETURN
  450.         ENDIF
  451.         SET EXACT ON
  452.         FOR i = 1 TO ALEN(THIS.aOptions)
  453.             IF THIS.aSaveOptions[m.i,3]#llSetBefore
  454.                 LOOP
  455.             ENDIF
  456.             
  457.             * Test for HREF flag to CopyFile
  458.             IF BITTEST(THIS.aSaveOptions[m.i,5],0)
  459.                 lcStyleProp=ALLTRIM(LEFT(THIS.aOptions[m.i],ATC("=",THIS.aOptions[m.i])-1))
  460.                 lcStyleVal=ALLTRIM(THIS.aSaveOptions[m.i,2])
  461.                 lcNewHref = THIS.GetHREF(lcStyleVal)
  462.                 IF !UPPER(lcNewHref)==UPPER(lcStyleVal)
  463.                     THIS.aOptions[m.i]=lcStyleProp+[="]+lcNewHref+["]
  464.                     THIS.aSaveOptions[m.i,2] = lcNewHref 
  465.                 ENDIF
  466.             ENDIF
  467.             
  468.             * Get styles
  469.             IF !EMPTY(THIS.aSaveOptions[m.i,4])
  470.                 lcStyleProp=ALLTRIM(LEFT(THIS.aOptions[m.i],ATC("=",THIS.aOptions[m.i])-1))
  471.                 lcStyleVal=ALLTRIM(SUBSTR(THIS.aOptions[m.i],ATC("=",THIS.aOptions[m.i])+1))
  472.                 IF !EMPTY(laStyles[1])
  473.                     lnPos=ASCAN(laStyles,lcStyleProp)
  474.                     IF lnPos#0    &&style already exists, so lets add to it
  475.                         laStyles[lnPos+1] = laStyles[lnPos+1]+"; "+THIS.aSaveOptions[m.i,4]+": "+lcStyleVal
  476.                         LOOP
  477.                     ENDIF
  478.                     DIMENSION laStyles[ALEN(laStyles,1)+1,2]
  479.                 ENDIF
  480.                 laStyles[ALEN(laStyles,1),1] = lcStyleProp
  481.                 laStyles[ALEN(laStyles,1),2] = THIS.aSaveOptions[m.i,4]+": "+lcStyleVal
  482.                 LOOP
  483.             ENDIF
  484.             
  485.             lcCmd = THIS.aOptions[m.i]
  486.             IF !EMPTY(lcCmd)
  487.                 THIS.INSAITEM(@laGenScript,lcCMD)
  488.             ENDIF
  489.         ENDFOR
  490.         SET EXACT &lcSaveExact
  491.         
  492.         * Process styles
  493.         FOR i = 1 TO ALEN(laStyles,1)
  494.             IF EMPTY(laStyles[m.i,1]) OR EMPTY(laStyles[m.i,2])
  495.                 LOOP
  496.             ENDIF
  497.             lcCmd = laStyles[m.i,1] + "=[" + laStyles[m.i,2] +"]"
  498.             THIS.INSAITEM(@laGenScript,lcCMD)
  499.         ENDFOR
  500.         
  501.         * Update fields        
  502.         lcGenStr=""
  503.         FOR i = 1 TO ALEN(laGenScript)
  504.             IF !EMPTY(ALLTRIM(laGenScript[m.i]))
  505.                 lcGenStr = lcGenStr + "_oHTML." + ALLTRIM(laGenScript[m.i])+C_CRLF
  506.             ENDIF
  507.         ENDFOR
  508.         
  509.         lnSaveArea=SELECT()
  510.         SELECT (THIS.cGenHTMLAlias)
  511.         IF llSetBefore
  512.             REPLACE Prescript WITH Prescript + C_CRLF + lcGenStr
  513.         ELSE
  514.             REPLACE GenScript WITH GenScript + C_CRLF + lcGenStr
  515.         ENDIF
  516.         SELECT (lnSaveArea)
  517.         
  518.     ENDPROC
  519.  
  520.     FUNCTION GetAlign(lnAlignCode)
  521.         DO CASE
  522.         CASE lnAlignCode = 1
  523.             RETURN ["left"]
  524.         CASE lnAlignCode = 2
  525.             RETURN ["right"]
  526.         CASE lnAlignCode = 3
  527.             RETURN ["center"]
  528.         OTHERWISE
  529.             RETURN ""
  530.         ENDCASE
  531.     ENDPROC
  532.  
  533.     FUNCTION GetHeading(lnHeadingCode)
  534.         IF lnHeadingCode=1
  535.             RETURN ""
  536.         ELSE
  537.             RETURN "H"+TRANS(lnHeadingCode-1)
  538.         ENDIF
  539.     ENDPROC
  540.  
  541.     FUNCTION GetHREF(lcHRef)
  542.         LOCAL lcJustFname,lcNewFile
  543.         IF ATC("://",lcHRef)#0
  544.             RETURN lcHREF
  545.         ENDIF
  546.         IF ATC("www.",LEFT(lcHRef,4))#0
  547.             RETURN "http://"+ALLTRIM(lcHREF)
  548.         ENDIF
  549.         * Assume user specified a local file
  550.         * Don't copy file if Previewing to avoid creating unneeded files.
  551.         IF THIS.lCopyImages AND THIS.nWizAction#9 AND FILE(lcHREF)
  552.             lcJustFname = JUSTFNAME(lcHREF)
  553.             lcNewFile = ADDBS(JUSTPATH(THIS.cOutFile))+lcJustFname
  554.             IF !FILE(lcNewFile)
  555.                 COPY FILE (lcHREF) TO (lcNewFile)
  556.             ENDIF
  557.             lcHREF = lcJustFname
  558.         ENDIF
  559.         RETURN lcHREF
  560.     ENDPROC
  561.     
  562.     FUNCTION AddBoldTag(tcHTMLTagRef,tnElement,taTags)
  563.         * Add bold tag
  564.         IF THIS.aCustomTags[m.tnElement,9]
  565.             THIS.InsaItem(@taTags,tcHTMLTagRef+[ = ]+tcHTMLTagRef+[.AddTag("strong")])
  566.         ENDIF
  567.     ENDPROC
  568.  
  569.     FUNCTION AddItalicTag(tcHTMLTagRef,tnElement,taTags)
  570.         * Add italic tag
  571.         IF THIS.aCustomTags[m.tnElement,10]
  572.             THIS.InsaItem(@taTags,tcHTMLTagRef+[ = ]+tcHTMLTagRef+[.AddTag("em")])
  573.         ENDIF
  574.     ENDPROC
  575.  
  576.     FUNCTION AddFontTag(tcHTMLTagRef,tnElement,taTags)
  577.         LOCAL lcHeading,lHasFontTag
  578.  
  579.         * Check if using heading (Hn)
  580.         lcHeading = THIS.GetHeading(THIS.aCustomTags[m.tnElement,6])
  581.         IF !EMPTY(lcHeading)
  582.             THIS.InsaItem(@taTags,tcHTMLTagRef+[ = ]+tcHTMLTagRef+[.AddTag("]+lcHeading+[")])
  583.             THIS.InsaItem(@taTags,tcHTMLTagRef+[.Align = ]+THIS.GetAlign(THIS.aCustomTags[m.tnElement,14]))
  584.         ENDIF
  585.  
  586.         IF EMPTY(lcHeading)
  587.             IF THIS.aCustomTags[m.tnElement,14]>0
  588.                 THIS.InsaItem(@taTags,tcHTMLTagRef+[ = ]+tcHTMLTagRef+[.AddTag("P")])
  589.                 THIS.InsaItem(@taTags,tcHTMLTagRef+[.Align = ]+THIS.GetAlign(THIS.aCustomTags[m.tnElement,14]))
  590.             ENDIF
  591.  
  592.             * Add Font tag
  593.             IF !EMPTY(THIS.aCustomTags[m.tnElement,7]) OR !EMPTY(THIS.aCustomTags[m.tnElement,8])            
  594.                 THIS.InsaItem(@taTags,tcHTMLTagRef+[ = ]+tcHTMLTagRef+[.AddTag("font")])
  595.                 lHasFontTag = .T.
  596.                 IF !EMPTY(THIS.aCustomTags[m.tnElement,7])
  597.                     THIS.InsaItem(@taTags,tcHTMLTagRef+[.face = "]+ALLTRIM(THIS.aCustomTags[m.tnElement,7])+["])
  598.                 ENDIF
  599.                 IF !EMPTY(THIS.aCustomTags[m.tnElement,8])
  600.                     THIS.InsaItem(@taTags,tcHTMLTagRef+[.Size = ]+TRANS(THIS.aCustomTags[m.tnElement,8]))
  601.                 ENDIF
  602.             ENDIF
  603.         ENDIF
  604.         
  605.         * Add the forecolor
  606.         IF !EMPTY(THIS.aCustomTags[m.tnElement,13])
  607.             IF !m.lHasFontTag
  608.                 THIS.InsaItem(@taTags,tcHTMLTagRef+[ = ]+tcHTMLTagRef+[.AddTag("font")])
  609.             ENDIF
  610.             THIS.InsaItem(@taTags,tcHTMLTagRef+[.Color = "]+TRANS(THIS.aCustomTags[m.tnElement,13])+["])
  611.         ENDIF
  612.     ENDPROC
  613.  
  614. ENDDEFINE
  615.